package com.douyin.controller;


import com.douyin.dto.LoginFormDTO;
import com.douyin.dto.ResetPasswordDTO;
import com.douyin.dto.Result;
import com.douyin.dto.UserUpdateProfileDTO;
import com.douyin.service.IFollowService;
import com.douyin.service.IUserService;
import com.douyin.vo.UserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author 虎哥
 * @since 2021-12-22
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private IUserService userService;

    /**
     * 发送邮箱验证码
     */
    @PostMapping("/code")
    public Result sendCode(@RequestParam("email") String email) {
        // TODO 发送短信验证码并保存验证码
        log.info("发送验证码给邮箱：{}", email);
        return userService.sendCode(email);
    }

    /**
     * 登录功能
     * @param loginForm 登录参数，包含手机号、验证码；或者手机号、密码
     */
    @PostMapping("/login")
    public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){
        // TODO 实现登录功能
        log.info("登录接口调用，参数：{}", loginForm);
        return userService.login(loginForm);

    }
//eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NTM3ODY3ODYsInVzZXJJZCI6MSwiZW1haWwiOiJ3ZW43NzAyNzcwMkAxNjMuY29tIn0.YwF7aWHS8Ibnu_G6u7Od-fBXTRCHfaj7gya6WZxr1_I
    /**
     * 登出功能
     * @return 无
     */
    @PostMapping("/logout")
    public Result logout(String token){
        // TODO 实现登出功能
        log.info("登出接口调用");
        return userService.logout(token);
    }

    /**
     * 获取当前登录用户
     * @return
     */
    @GetMapping("/me")
    public Result me(){
        // TODO 获取当前登录的用户并返回
        log.info("获取当前登录用户");
        UserVO me = userService.me();
        if (me==null){
            return Result.fail("用户信息为空");
        }
        return Result.ok(me);
    }
    /**
     * 用户修改个人信息
     */
    @PutMapping("/profile")
    public Result update(@RequestBody UserUpdateProfileDTO userUpdateProfileDTO){
        // TODO 实现用户修改个人信息
        log.info("用户修改个人信息接口调用，参数：{}", userUpdateProfileDTO);
        return userService.updatePersonalInfo(userUpdateProfileDTO);
    }

    /**
     * 用户修改密码
     * @param resetPasswordDTO
     * @return
     */
    @PutMapping("/password")
    public Result updatePassword(@RequestBody ResetPasswordDTO resetPasswordDTO){
        // TODO 实现用户修改密码
        log.info("用户修改密码接口调用");
        return userService.updatePassword(resetPasswordDTO);
    }


}
